home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.mactech.com 2010
/
ftp.mactech.com.tar
/
ftp.mactech.com
/
machack
/
Hacks96
/
FlyPaper.sit
/
Fly Paper
/
FlyPaper Source
/
App Sources
/
MagicWindow.cpp
< prev
next >
Wrap
Text File
|
1996-06-22
|
3KB
|
154 lines
#ifndef MAGICWINDOW_H
#include "MagicWindow.h"
#endif
#ifndef FLYPAPERINIT_H
#include "FlyPaperINIT.h"
#endif
#ifndef FLYPAPERAPP_H
#include "FlyPaperApp.h"
#endif
#ifndef CLIPPINGFILE_H
#include "ClippingFile.h"
#endif
#ifndef CLIPPINGWINDOW_H
#include "ClippingWindow.h"
#endif
#include "Floaters.h"
#ifndef __DRAG__
#include <Drag.h>
#endif
static
void MagicDisposeProc (WindowPtr win)
{
try {
FlyPaperGestaltPtr data = GetINITData ();
if (data && data -> magicWindow == win) {
data -> magicWindow = nil;
}
DisposeFloater (win);
} catch (...) {
}
}
static
void MagicEventHandler (EventRecord *theEvent, WindowPtr win)
{
try {
if (theEvent -> what == updateEvt) {
BeginUpdate(win);
EndUpdate (win);
}
} catch (...) {
}
}
static pascal
OSErr MagicTrackingHandler (DragTrackingMessage message, WindowPtr win, long myA5,
DragReference dragRef)
{
try {
} catch (OSErr error) {
return error;
} catch (...) {
return memFullErr;
}
return noErr;
}
static
pascal OSErr MagicReceiveHandler (WindowPtr win, long homeA5, DragReference dragRef)
{
long oldA5 = SetA5(homeA5);
GrafPtr oldPort;
Point dropLocation = { 1, 1 };
try {
GetPort (&oldPort);
SetPort (win);
LocalToGlobal (&dropLocation);
SetPort (oldPort);
short tile = 0;
MoveWindow (win, 30000, 30000, false);
unsigned short numItems;
OSErr error = CountDragItems (dragRef, &numItems);
if (error)
throw error;
for (unsigned short whichItem = 1; whichItem <= numItems; ++whichItem) {
ItemReference dragItem;
unsigned short numFlavors;
error = GetDragItemReferenceNumber (dragRef, whichItem, &dragItem);
if (error)
throw error;
CClippingFile* file = CClippingFile::NewClippingFileFromDragItem (dragRef,
dragItem, dropLocation, tile);
if (file) {
try {
FSSpec spec;
file -> GetFSSpec (spec);
QueueUpFileForProcessing (&spec);
delete file;
} catch (...) {
delete file;
throw;
}
++tile;
}
}
} catch (OSErr error) {
SetA5 (oldA5);
return error;
} catch (...) {
SetA5 (oldA5);
return memFullErr;
}
SetA5 (oldA5);
return noErr;
}
WindowPtr CreateMagicWindow (void)
{
Rect bounds = { 30000, 30000, 30003, 30003 };
WindowPtr win = NewFloater (0, &bounds, "\pFly Paper!", false, plainDBox, (WindowPtr) -1,
true, 0, 0, MagicEventHandler, MagicDisposeProc);
if (!win)
throw memFullErr;
FlyPaperGestaltPtr data = GetINITData ();
data -> magicWindow = win;
static DragTrackingHandlerUPP trackingHandler=0;
static DragReceiveHandlerUPP receiveHandler=0;
if (!trackingHandler)
trackingHandler = NewDragTrackingHandlerProc (MagicTrackingHandler);
if (!receiveHandler)
receiveHandler = NewDragReceiveHandlerProc (MagicReceiveHandler);
if (trackingHandler && receiveHandler) {
InstallTrackingHandler (trackingHandler, win, (void*) GetCurrentA5 ());
InstallReceiveHandler (receiveHandler, win, (void*) GetCurrentA5 ());
} else
throw memFullErr;
return win;
}